using System;
using System.Collections.Generic;
using System.Linq;
using MathSharp;

namespace MathSharp.Script
{	
	public abstract class Variable
	{
		Namespace ns;
		
		public Variable (Namespace Namespace, string name)
		{
			if (Namespace == null)
				throw new ArgumentNullException("Namespace");
			if (name.IsNullOrWhiteSpace())
				throw new ArgumentNullException("name");
			ns = Namespace;
			this.Name = name;
		}
		
		public static ValueType ParseValueType(Script script, int line, string name) {
			ValueType res;
			if (!Enum.TryParse<ValueType>(name, true, out res))
				throw new ParseException(script.FileName, line, 0, 0x0,
				                         "Указан неверный тип переменной: {0}", name);
			return res;
		}
		
		public string Name {
			get;
			set;
		}
		
		/// <summary>
		/// тип с которым была объявлена переменная
		/// </summary>
		public ValueType AllowedType {
			get;
			set;
		}
		
		public Value Value {
			get;
			protected set;
		}
	}
}

